﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Monitor.Controllers.ApiControllers;
using OfficeOpenXml;
using System.Xml;
using System.Drawing;
using OfficeOpenXml.Style;

namespace Monitor.Models.Core
{
    //создание отчетов
    public class ReportCreater
    {
        //модель
        private JsonModel.GetReport Model;
        //логер
        private Interfaces.ILogger _logger;
        public ReportCreater(JsonModel.GetReport model, Interfaces.ILogger logger)
        {
            Model = model;
            //корректировка времени
            Model.endDateTime = Model.beginDateTime.AddHours(1);

            _logger = logger;
        }

        public string Name { get; set; }

        //возвращение отчета
        public ExcelPackage GetReport
        {
            get
            {
                try
                {
                    //выбор конструктора отчета по индификатору
                    switch (Model.typeI)
                    {
                        case 1: //фиксированный за сутки
                            {
                                Name = "Type1";
                                return this.ReportType1;
                            }
                        default://по умолчанию чистый
                            {
                                Name = "blank";
                                return this.Blank;
                            }
                    }
                }
                catch (Exception exception)
                {
                    _logger.Debug(Model,exception);
                    return this.Blank;//возвращаем пустой отчет
                }

            }
        }

        //контструктор отчета №1
        private ExcelPackage ReportType1
        {
            get
            {
                //открываем файл шаблона отчета
                System.IO.Stream stream = new System.IO.MemoryStream(Library.ReportTemplate.Type1);
                ExcelPackage pck = new ExcelPackage(stream);
                stream.Close();

                //на первом листе
                ExcelWorksheet ws = pck.Workbook.Worksheets.First();

                ws.Cells[1, 1].Value = "Отчет успешно создан";
                //подключаем веб контроллер
                using (ArchiveStateController dArchiveStateController =
                    DependencyResolver.Current.GetService<ArchiveStateController>())
                {


                    int column = 1;
                    foreach (int indexMp in Model.massiveIdInts.Distinct())
                    {
                        ws.Cells[2, column].Value = string.Format("Точка с Id={0}", indexMp);
                        Collection<DataValue> data = dArchiveStateController.GetArchiveState(indexMp, 1, Model.beginDateTime,
                                                                                       Model.endDateTime);
                        for (int i = 1; i <= data.Count(); i++)
                        {
                            ws.Cells[i + 2, column].Value = data[i - 1].Value;
                        }
                        column++;
                    }
                }
                return pck;
            }
        }
        //конструктор пустого отчета
        private ExcelPackage Blank
        {
            get
            {
                System.IO.Stream stream = new System.IO.MemoryStream(Library.ReportTemplate.Blank);
                ExcelPackage pck = new ExcelPackage(stream);
                stream.Close();
                return pck;
            }
        }
    }
}